--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
meshchatx/src/frontend/js/apiClient.js e0f1f99cd1c208c5008a936230c38e448dddd45d (e0f1f99c) Text, 5.85 KB
T8b949e/**
* Axios-shaped HTTP helpers backed by fetch (same-origin API calls).
*/
Tff7b72import Tb4b4b4{ Te6edf3fetchCsrfTokenTb4b4b4, Te6edf3getCsrfToken Tb4b4b4} Tff7b72from Ta5d6ff"./csrfToken.js"Tb4b4b4;
Tff7b72export Tff7b72function Te6edf3isCancelTb4b4b4(Te6edf3errorTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3errorTb4b4b4) Tff7b72return Tff7b72falseTb4b4b4;
Tff7b72return Te6edf3errorTb4b4b4.Te6edf3name Tff7b72=== Ta5d6ff"AbortError" Tff7b72|| Te6edf3errorTb4b4b4.Te6edf3name Tff7b72=== Ta5d6ff"CanceledError"Tb4b4b4;
Tb4b4b4}
Tff7b72function Te6edf3buildUrlTb4b4b4(Te6edf3pathTb4b4b4, Te6edf3paramsTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3params Tff7b72|| Tff7b72typeof Te6edf3params Tff7b72!== Ta5d6ff"object" Tff7b72|| Tffa657ObjectTb4b4b4.Te6edf3keysTb4b4b4(Te6edf3paramsTb4b4b4)Tb4b4b4.Te6edf3length Tff7b72=== T79c0ff0Tb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3pathTb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3u Tff7b72= Tff7b72new Te6edf3URLTb4b4b4(Te6edf3pathTb4b4b4, Tffa657windowTb4b4b4.Te6edf3locationTb4b4b4.Te6edf3originTb4b4b4)Tb4b4b4;
Tff7b72for Tb4b4b4(Tff7b72const Tb4b4b4[Te6edf3kTb4b4b4, Te6edf3vTb4b4b4] Tff7b72of Tffa657ObjectTb4b4b4.Te6edf3entriesTb4b4b4(Te6edf3paramsTb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3v Tff7b72=== Tff7b72undefined Tff7b72|| Te6edf3v Tff7b72=== Tff7b72nullTb4b4b4) Tff7b72continueTb4b4b4;
Tff7b72if Tb4b4b4(Tffa657ArrayTb4b4b4.Te6edf3isArrayTb4b4b4(Te6edf3vTb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72for Tb4b4b4(Tff7b72const Te6edf3item Tff7b72of Te6edf3vTb4b4b4) Tb4b4b4{
Te6edf3uTb4b4b4.Te6edf3searchParamsTb4b4b4.Te6edf3appendTb4b4b4(Te6edf3kTb4b4b4, Tffa657StringTb4b4b4(Te6edf3itemTb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3uTb4b4b4.Te6edf3searchParamsTb4b4b4.Te6edf3setTb4b4b4(Te6edf3kTb4b4b4, Tffa657StringTb4b4b4(Te6edf3vTb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tff7b72return Ta5d6ff`Tffd700${Te6edf3uTb4b4b4.Te6edf3pathnameTffd700}Tffd700${Te6edf3uTb4b4b4.Te6edf3searchTffd700}Tffd700${Te6edf3uTb4b4b4.Te6edf3hashTffd700}Ta5d6ff`Tb4b4b4;
Tb4b4b4}
Tff7b72async Tff7b72function Te6edf3parseErrorBodyTb4b4b4(Te6edf3responseTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3ct Tff7b72= Te6edf3responseTb4b4b4.Te6edf3headersTb4b4b4.Te6edf3getTb4b4b4(Ta5d6ff"content-type"Tb4b4b4) Tff7b72|| Ta5d6ff""Tb4b4b4;
Tff7b72try Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3ctTb4b4b4.Te6edf3includesTb4b4b4(Ta5d6ff"application/json"Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3text Tff7b72= Tff7b72await Te6edf3responseTb4b4b4.Te6edf3textTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72return Te6edf3text Tff7b72? Tffa657JSONTb4b4b4.Te6edf3parseTb4b4b4(Te6edf3textTb4b4b4) Tff7b72: Tff7b72nullTb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3text Tff7b72= Tff7b72await Te6edf3responseTb4b4b4.Te6edf3textTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3textTb4b4b4) Tff7b72return Tb4b4b4{ Te6edf3messageTff7b72: Te6edf3responseTb4b4b4.Te6edf3statusText Tb4b4b4}Tb4b4b4;
Tff7b72try Tb4b4b4{
Tff7b72return Tffa657JSONTb4b4b4.Te6edf3parseTb4b4b4(Te6edf3textTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
Tff7b72return Tb4b4b4{ Te6edf3messageTff7b72: Te6edf3text Tb4b4b4}Tb4b4b4;
Tb4b4b4}
Tb4b4b4} Tff7b72catch Tb4b4b4{
Tff7b72return Tff7b72nullTb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tff7b72async Tff7b72function Te6edf3readSuccessBodyTb4b4b4(Te6edf3responseTb4b4b4, Te6edf3responseTypeTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3responseTb4b4b4.Te6edf3status Tff7b72=== T79c0ff204 Tff7b72|| Te6edf3responseTb4b4b4.Te6edf3status Tff7b72=== T79c0ff205Tb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72nullTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3responseType Tff7b72=== Ta5d6ff"blob"Tb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3responseTb4b4b4.Te6edf3blobTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3responseType Tff7b72=== Ta5d6ff"arraybuffer"Tb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3responseTb4b4b4.Te6edf3arrayBufferTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3ct Tff7b72= Te6edf3responseTb4b4b4.Te6edf3headersTb4b4b4.Te6edf3getTb4b4b4(Ta5d6ff"content-type"Tb4b4b4) Tff7b72|| Ta5d6ff""Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3ctTb4b4b4.Te6edf3includesTb4b4b4(Ta5d6ff"application/json"Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3text Tff7b72= Tff7b72await Te6edf3responseTb4b4b4.Te6edf3textTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72return Te6edf3text Tff7b72? Tffa657JSONTb4b4b4.Te6edf3parseTb4b4b4(Te6edf3textTb4b4b4) Tff7b72: Tff7b72nullTb4b4b4;
Tb4b4b4}
Tff7b72return Te6edf3responseTb4b4b4.Te6edf3textTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
T8b949e/**
* True when a 403 is a CSRF rejection (not a missing login session).
* @param {number} status
* @param {unknown} errData
* @returns {boolean}
*/
Tff7b72export Tff7b72function Te6edf3isCsrfRejectionTb4b4b4(Te6edf3statusTb4b4b4, Te6edf3errDataTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3status Tff7b72!== T79c0ff403Tb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72falseTb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3text Tff7b72=
Tb4b4b4(Te6edf3errData Tff7b72&& Tff7b72typeof Te6edf3errData Tff7b72=== Ta5d6ff"object" Tff7b72&& Tb4b4b4(Te6edf3errDataTb4b4b4.Te6edf3error Tff7b72|| Te6edf3errDataTb4b4b4.Te6edf3messageTb4b4b4)Tb4b4b4) Tff7b72||
Tb4b4b4(Tff7b72typeof Te6edf3errData Tff7b72=== Ta5d6ff"string" Tff7b72? Te6edf3errData Tff7b72: Ta5d6ff""Tb4b4b4)Tb4b4b4;
Tff7b72return Tff7b72typeof Te6edf3text Tff7b72=== Ta5d6ff"string" Tff7b72&& Ta5d6ff/csrf/iTb4b4b4.Te6edf3testTb4b4b4(Te6edf3textTb4b4b4)Tb4b4b4;
Tb4b4b4}
T8b949e/**
* @param {{ onAuthError?: (err: Error & { response?: { status: number, data: unknown } }) => void }} options
*/
Tff7b72export Tff7b72function Te6edf3createApiClientTb4b4b4(Te6edf3options Tff7b72= Tb4b4b4{Tb4b4b4}Tb4b4b4) Tb4b4b4{
Tff7b72const Tb4b4b4{ Te6edf3onAuthError Tb4b4b4} Tff7b72= Te6edf3optionsTb4b4b4;
Tff7b72async Tff7b72function Te6edf3requestTb4b4b4(Te6edf3methodTb4b4b4, Te6edf3pathTb4b4b4, Te6edf3config Tff7b72= Tb4b4b4{Tb4b4b4}Tb4b4b4, Te6edf3csrfRetry Tff7b72= Tff7b72falseTb4b4b4) Tb4b4b4{
Tff7b72const Tb4b4b4{ Te6edf3paramsTb4b4b4, Te6edf3dataTb4b4b4, Te6edf3signalTb4b4b4, Te6edf3headers Tff7b72= Tb4b4b4{Tb4b4b4}Tb4b4b4, Te6edf3responseType Tb4b4b4} Tff7b72= Te6edf3configTb4b4b4;
Tff7b72const Te6edf3url Tff7b72= Te6edf3buildUrlTb4b4b4(Te6edf3pathTb4b4b4, Te6edf3paramsTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3hdrs Tff7b72= Tff7b72new Te6edf3HeadersTb4b4b4(Te6edf3headersTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3method Tff7b72!== Ta5d6ff"GET" Tff7b72&& Te6edf3method Tff7b72!== Ta5d6ff"HEAD" Tff7b72&& Te6edf3pathTb4b4b4.Te6edf3startsWithTb4b4b4(Ta5d6ff"/api/"Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3csrf Tff7b72= Te6edf3getCsrfTokenTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3csrfTb4b4b4) Tb4b4b4{
Te6edf3hdrsTb4b4b4.Te6edf3setTb4b4b4(Ta5d6ff"X-CSRF-Token"Tb4b4b4, Te6edf3csrfTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tff7b72const Te6edf3init Tff7b72= Tb4b4b4{ Te6edf3methodTb4b4b4, Te6edf3signalTb4b4b4, Te6edf3headersTff7b72: Te6edf3hdrs Tb4b4b4}Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3data Tff7b72!== Tff7b72undefined Tff7b72&& Te6edf3method Tff7b72!== Ta5d6ff"GET" Tff7b72&& Te6edf3method Tff7b72!== Ta5d6ff"HEAD"Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3data Tff7b72instanceof Te6edf3FormDataTb4b4b4) Tb4b4b4{
Te6edf3hdrsTb4b4b4.Tff7b72deleteTb4b4b4(Ta5d6ff"Content-Type"Tb4b4b4)Tb4b4b4;
Te6edf3hdrsTb4b4b4.Tff7b72deleteTb4b4b4(Ta5d6ff"content-type"Tb4b4b4)Tb4b4b4;
Te6edf3initTb4b4b4.Te6edf3body Tff7b72= Te6edf3dataTb4b4b4;
Tb4b4b4} Tff7b72else Tff7b72if Tb4b4b4(Tff7b72typeof Te6edf3data Tff7b72=== Ta5d6ff"string" Tff7b72|| Te6edf3data Tff7b72instanceof Te6edf3Blob Tff7b72|| Te6edf3data Tff7b72instanceof Tffa657ArrayBufferTb4b4b4) Tb4b4b4{
Te6edf3initTb4b4b4.Te6edf3body Tff7b72= Te6edf3dataTb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3hdrsTb4b4b4.Te6edf3hasTb4b4b4(Ta5d6ff"Content-Type"Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3hdrsTb4b4b4.Te6edf3setTb4b4b4(Ta5d6ff"Content-Type"Tb4b4b4, Ta5d6ff"application/json"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Te6edf3initTb4b4b4.Te6edf3body Tff7b72= Tffa657JSONTb4b4b4.Te6edf3stringifyTb4b4b4(Te6edf3dataTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tff7b72let Te6edf3responseTb4b4b4;
Tff7b72try Tb4b4b4{
Te6edf3response Tff7b72= Tff7b72await Te6edf3fetchTb4b4b4(Te6edf3urlTb4b4b4, Te6edf3initTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3isCancelTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4) Tff7b72throw Te6edf3eTb4b4b4;
Tff7b72throw Te6edf3eTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3responseTb4b4b4.Te6edf3okTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3errData Tff7b72= Tff7b72await Te6edf3parseErrorBodyTb4b4b4(Te6edf3responseTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3err Tff7b72= Tffa657ObjectTb4b4b4.Te6edf3assignTb4b4b4(Tff7b72new Tf85149ErrorTb4b4b4(Ta5d6ff`Ta5d6ffHTTP Tffd700${Te6edf3responseTb4b4b4.Te6edf3statusTffd700}Ta5d6ff`Tb4b4b4)Tb4b4b4, Tb4b4b4{
Te6edf3nameTff7b72: Ta5d6ff"HttpError"Tb4b4b4,
Te6edf3responseTff7b72: Tb4b4b4{ Te6edf3statusTff7b72: Te6edf3responseTb4b4b4.Te6edf3statusTb4b4b4, Te6edf3dataTff7b72: Te6edf3errData Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3mutating Tff7b72= Te6edf3method Tff7b72!== Ta5d6ff"GET" Tff7b72&& Te6edf3method Tff7b72!== Ta5d6ff"HEAD" Tff7b72&& Te6edf3pathTb4b4b4.Te6edf3startsWithTb4b4b4(Ta5d6ff"/api/"Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3mutating Tff7b72&& Tff7b72!Te6edf3csrfRetry Tff7b72&& Te6edf3isCsrfRejectionTb4b4b4(Te6edf3responseTb4b4b4.Te6edf3statusTb4b4b4, Te6edf3errDataTb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72await Te6edf3fetchCsrfTokenTb4b4b4(Tb4b4b4{
Te6edf3getTb4b4b4(Te6edf3csrfPathTb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3requestTb4b4b4(Ta5d6ff"GET"Tb4b4b4, Te6edf3csrfPathTb4b4b4, Tb4b4b4{Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
T8b949e// Fall through and surface the original CSRF error.
Tff7b72throw Te6edf3errTb4b4b4;
Tb4b4b4}
Tff7b72return Te6edf3requestTb4b4b4(Te6edf3methodTb4b4b4, Te6edf3pathTb4b4b4, Te6edf3configTb4b4b4, Tff7b72trueTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3onAuthError Tff7b72&& Tb4b4b4(Te6edf3responseTb4b4b4.Te6edf3status Tff7b72=== T79c0ff401 Tff7b72|| Te6edf3responseTb4b4b4.Te6edf3status Tff7b72=== T79c0ff403Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3isCsrfRejectionTb4b4b4(Te6edf3responseTb4b4b4.Te6edf3statusTb4b4b4, Te6edf3errDataTb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3onAuthErrorTb4b4b4(Te6edf3errTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tff7b72throw Te6edf3errTb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3dataOut Tff7b72= Tff7b72await Te6edf3readSuccessBodyTb4b4b4(Te6edf3responseTb4b4b4, Te6edf3responseTypeTb4b4b4)Tb4b4b4;
Tff7b72return Tb4b4b4{ Te6edf3dataTff7b72: Te6edf3dataOutTb4b4b4, Te6edf3statusTff7b72: Te6edf3responseTb4b4b4.Te6edf3statusTb4b4b4, Te6edf3headersTff7b72: Te6edf3responseTb4b4b4.Te6edf3headers Tb4b4b4}Tb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3api Tff7b72= Tb4b4b4{
Te6edf3getTb4b4b4(Te6edf3pathTb4b4b4, Te6edf3configTb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3requestTb4b4b4(Ta5d6ff"GET"Tb4b4b4, Te6edf3pathTb4b4b4, Te6edf3config Tff7b72|| Tb4b4b4{Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3postTb4b4b4(Te6edf3pathTb4b4b4, Te6edf3dataTb4b4b4, Te6edf3config Tff7b72= Tb4b4b4{Tb4b4b4}Tb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3requestTb4b4b4(Ta5d6ff"POST"Tb4b4b4, Te6edf3pathTb4b4b4, Tb4b4b4{ Tb4b4b4...Te6edf3configTb4b4b4, Te6edf3data Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3patchTb4b4b4(Te6edf3pathTb4b4b4, Te6edf3dataTb4b4b4, Te6edf3config Tff7b72= Tb4b4b4{Tb4b4b4}Tb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3requestTb4b4b4(Ta5d6ff"PATCH"Tb4b4b4, Te6edf3pathTb4b4b4, Tb4b4b4{ Tb4b4b4...Te6edf3configTb4b4b4, Te6edf3data Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3putTb4b4b4(Te6edf3pathTb4b4b4, Te6edf3dataTb4b4b4, Te6edf3config Tff7b72= Tb4b4b4{Tb4b4b4}Tb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3requestTb4b4b4(Ta5d6ff"PUT"Tb4b4b4, Te6edf3pathTb4b4b4, Tb4b4b4{ Tb4b4b4...Te6edf3configTb4b4b4, Te6edf3data Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Tff7b72deleteTb4b4b4(Te6edf3pathTb4b4b4, Te6edf3config Tff7b72= Tb4b4b4{Tb4b4b4}Tb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3requestTb4b4b4(Ta5d6ff"DELETE"Tb4b4b4, Te6edf3pathTb4b4b4, Te6edf3config Tff7b72|| Tb4b4b4{Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3isCancelTb4b4b4,
Tb4b4b4}Tb4b4b4;
Tff7b72return Te6edf3apiTb4b4b4;
Tb4b4b4}
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────